<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace hdphp\utils;

use think\cache\TagSet;
use think\Container;

/**
 * Class：Tag
 * 创建人：Jack
 * 创建时间：2023/7/28 11:37
 * @package hdphp\utils
 */
class Tag
{
    /**
     * @var TagSet
     */
    protected $tag;

    /**
     * @var string
     */
    protected $tagStr;

    /**
     * 构造方法
     * @param TagSet $set
     * @param string $tagStr
     */
    public function __construct(TagSet $set, string $tagStr)
    {
        $this->tag = $set;
        $this->tagStr = $tagStr;
    }

    /**
     * 注释：remember
     * 创建人：Jack
     * 创建时间：2023/7/28 11:38
     * @param string $name
     * @param        $value
     * @param null   $expire
     * @return mixed
     */
    public function remember(string $name, $value, $expire = null)
    {
        // 不开启数据缓存直接返回
        if (!app()->config->get('cache.is_data')) {
            if ($value instanceof \Closure) {
                $value = Container::getInstance()->invokeFunction($value);
            }

            return $value;
        }
        $name = $this->tagStr . $name;

        return $this->tag->remember($name, $value, $expire);
    }

    /**
     * 注释：魔术方法
     * 创建人：Jack
     * 创建时间：2023/7/28 11:38
     * @param $name
     * @param $arguments
     * @return void
     */
    public function __call($name, $arguments)
    {
        $this->tag->{$name}(...$arguments);
    }
}